home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / BOCOLE.PAK / BCONNPNT.H < prev    next >
C/C++ Source or Header  |  1997-05-06  |  5KB  |  128 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectComponents
  3. // Copyright (c) 1994, 1996 by Borland International, All Rights Reserved
  4. //
  5. // $Revision:   2.7  $
  6. //
  7. //  Bolero helper for Connection Points  
  8. //
  9. //    BEventClass is the base implementation for Connection Point.  
  10. //    BEventClass deals with sinks collection and with Advise and   
  11. //    Unadvise member functions.                                    
  12. //    BEventClass keeps also a collection of void pointers which are
  13. //    those resulted from QueryInterface on sinks. Control implementors 
  14. //    can ask for this list.                                      
  15. //----------------------------------------------------------------------------
  16. #ifndef _BCONNPNT_H
  17. #define _BCONNPNT_H 1
  18.  
  19. #ifndef _BOLE_H
  20. #include "bole.h"
  21. #endif
  22.  
  23. #define BOLE_DEFAULT_ENUM_SIZE    10
  24.  
  25.  
  26.  
  27. //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ 
  28. ////\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\// 
  29. //      Class BEventHandler                                                                                              
  30. //                                                                            
  31. //      Purpose:                                                              
  32. //              This class is mainly the implementation for IConnectionPoint 
  33. //              It deals with all is releted to with sinks handling. This class
  34. //              contains a nested class which is the object implementing       
  35. //              the two lists of sinks.    
  36. //
  37. //
  38. ////\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\// 
  39. //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
  40. class _ICLASS BEventHandler : public IBEventClass,
  41.                       public IConnectionPoint
  42. {
  43.   public:
  44.     BEventHandler (REFIID, LPUNKNOWN, UINT = BOLE_DEFAULT_ENUM_SIZE);
  45.     ~BEventHandler();
  46.  
  47.     //\\// IUnknown methods \\//\\
  48.     ULONG _IFUNC AddRef ();
  49.     ULONG _IFUNC Release ();
  50.     HRESULT _IFUNC QueryInterface(REFIID, LPVOID FAR*);
  51.  
  52.     //\\// IBEventClass methods \\//\\
  53.     HRESULT _IFUNC GetSinkList (IBSinkList **);
  54.     HRESULT _IFUNC FreezeEvents (bool);
  55.  
  56.     //\\// IConnectionPoint methods \\//\\
  57.     HRESULT _IFUNC GetConnectionInterface (IID FAR*);
  58.     HRESULT _IFUNC GetConnectionPointContainer (LPCONNECTIONPOINTCONTAINER FAR*);
  59.     HRESULT _IFUNC Advise (LPUNKNOWN, DWORD FAR*);
  60.     HRESULT _IFUNC Unadvise (DWORD);
  61.     HRESULT _IFUNC EnumConnections (LPENUMCONNECTIONS FAR*);
  62.  
  63.   private:
  64.  
  65.     
  66.     //\\//\\//\\//\\//\\//\\//\\//\\//\\//
  67.     //      Connections list class       
  68.     //\\//\\//\\//\\//\\//\\//\\//\\//\\//
  69.  
  70.     class BSinkList : public IBSinkList,
  71.                   public IEnumConnections {
  72.  
  73.       public:
  74.         BSinkList (UINT = BOLE_DEFAULT_ENUM_SIZE);
  75.         ~BSinkList ();
  76.  
  77.         //\\// IUnknown \\//\\
  78.         ULONG _IFUNC AddRef ();
  79.         ULONG _IFUNC Release ();
  80.         HRESULT _IFUNC QueryInterface (REFIID, LPVOID FAR*);
  81.  
  82.         //\\// IBSinkList \\//\\
  83.         HRESULT _IFUNC NextSink (LPVOID FAR*);
  84.         HRESULT _IFUNC GetSinkAt (int, LPVOID FAR*);
  85.  
  86.         //\\// /IEnumConnections \\//\\
  87.         HRESULT _IFUNC Next (ULONG, LPCONNECTDATA, ULONG FAR*);
  88.         HRESULT _IFUNC Skip (ULONG);
  89.         HRESULT _IFUNC Clone (LPENUMCONNECTIONS FAR*);
  90.  
  91.         //\\// IBSinkList & IEnumConnection \\//\\
  92.         HRESULT _IFUNC Reset ();
  93.  
  94.         // public member functions
  95.         inline IUnknown * operator [] (int nPos) { return pUnkList[nPos]; }
  96.         inline int Size() { return nSize; }
  97.         inline void SetFreeze (bool fF) { fFreeze = fF; }
  98.  
  99.         void SetSinkAt (IUnknown* pU, LPVOID pObj, int nPos);
  100.         void DeleteSinkAt (int);
  101.         // inline int Position() { return nCurrPos; } // should be unused now
  102.         int Expand ();
  103.  
  104.       private:
  105.         BSinkList (BSinkList*); // used by ::Clone function
  106.  
  107.       private:
  108.         LPUNKNOWN FAR* pUnkList; // contains IUnknown
  109.         LPVOID FAR* pDirectList; // contains real interface pointer
  110.         int nCurrPos;
  111.         int nSize;
  112.         bool fFreeze;
  113.  
  114.         DWORD cRef;
  115.  
  116.     } * pSinkList; // sink list
  117.  
  118.     // Connection Point information
  119.     REFIID EventIID; // event iid
  120.     LPUNKNOWN pBackToCPC; // ConnectionPointContainer back pointer
  121.  
  122.     DWORD cRef; // lifetime counter
  123. };
  124.  
  125. #endif
  126.  
  127.  
  128.